using System;
using System.Collections.Generic;
using System.Text;
using automobili_data.interfaces;
using System.Collections;

namespace automobili_data
{
    public class AutomobiliDataManager
    {
        /// <summary>
        /// 
        /// </summary>
        public static AutomobiliDataManager instance = new AutomobiliDataManager();

        /// <summary>
        /// 
        /// </summary>
        AutomobiliDataManagerImpl myImpl = AutomobiliDataFactory.instance.createDBAdapter();

        /// <summary>
        /// 
        /// </summary>
        public AutomobiliDataManager()
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="dbConnStr"></param>
        /// <param name="dbKind"></param>
        public static void init(String dbConnStr, DatabaseKind dbKind)
        {
            AutomobiliDataFactory.init(dbConnStr, dbKind);
        }
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="firstName"></param>
        /// <param name="lastName"></param>
        public void createUser(String firstName, String lastName, String mail, String password)
        {
            myImpl.createUser(firstName, lastName, mail, password);
        }

      

        /// <summary>
        /// 
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public User getUser(long userId)
        {
            return myImpl.getUser(userId);
        }

        public User getUser(String username, String password)
        {
            return myImpl.getUser(username, password);
        }

        public User getUserN(String username) {
            return myImpl.getUserN(username);
        }

        public ArrayList dohvatiModele() {
            return myImpl.dohvatiModele();
        }

        public ArrayList dohvatiMarke() {
            return myImpl.dohvatiMarke();
        }

        public ArrayList dohvatiGorivo() {
            return myImpl.dohvatiGorivo();
        }

        public ArrayList dohvatiKaroseriju() {
            return myImpl.dohvatiKaroseriju();
        }

        public IList<Automobil> nadjiAutomobile(String marka, String model, String karoserija, String gorivo, double cena, int godinaProizv, int skuplj, int jeftinij, int starij, int mladj)
        {
            return myImpl.nadjiAutomobile(marka, model, karoserija, gorivo, cena, godinaProizv, skuplj, jeftinij, starij, mladj);

        }

        public IList<Automobil> nadjiAutomobileDeo(String marka, String model, String karoserija, String gorivo, double cena, int godinaProizv, int skuplj, int jeftinij, int starij, int mladj)
        {
            return myImpl.nadjiAutomobileDeo(marka, model, karoserija, gorivo, cena, godinaProizv, skuplj, jeftinij, starij, mladj);

        }

        public IList<Automobil> dohvatiDetalje(int i) {
            return myImpl.dohvatiDetalje(i);
        }

        public void kreirajOglas (int idKor, int aktivan)
        {
             myImpl.kreirajOglas(idKor, aktivan);
        }

        public IList<Oglas> podaciZaMail (int idKor)
        {
           return myImpl.podaciZaMail(idKor);
        }

        public void kreirajRezervaciju (int idKor, int idAut) 
        {
            myImpl.kreirajRezervaciju(idKor, idAut);
        }

        public void aktivacija (int idOgl, int status)
        {
            myImpl.aktivacija(idOgl, status);
        }

        public void unesiOglas(String marka, String model, String karoserija, String gorivo, double cena, int godinaProizv){
    myImpl.unesiOglas(marka, model, karoserija, gorivo, cena, godinaProizv);
    }

        public IList<CellPhoneManufacturer> searchCellPhonesManufacturers(String manufacturer, String model)
        {
            IList<CellPhoneManufacturer> result = new List<CellPhoneManufacturer>();
            result.Add(new CellPhoneManufacturer("Nokia"));
            result.Add(new CellPhoneManufacturer("Samsung"));

            return result;
        }
        public Privilegije dohvatiPrivilegije(User kor) {
           return myImpl.dohvatiPrivilegije(kor);
        }

        public IList<Rezervacija> podaciZaRezervaciju ()
        {
            return myImpl.podaciZaRezervaciju();
        }

        public IList<Oglas> dohvatiOglase (int idKor)
        {
            return myImpl.dohvatiOglase(idKor);
        }

        public IList<Rezervacija> dohvatiRezervacije (int idKor)
        {
            return myImpl.dohvatiRezervacije(idKor);
        }

        public IList<Privilegije> dohvatiPrivilegije ()
        {
            return myImpl.dohvatiPrivilegije();
        }

        public Privilegije dohvatiPrivilegijeP (int idKor)
        {
            return myImpl.dohvatiPrivilegijeP(idKor);
        }

        public IList<Privilegije> dohvatiPrivilegije (int idKor)
        {
            return myImpl.dohvatiPrivilegije(idKor);
        }

        public void kreirajPrivilegiju (Privilegije privilegije)
        {
            myImpl.kreirajPrivilegiju(privilegije);
        }

        public void dodajMarku (string marka)
        {
            myImpl.dodajMarku(marka);
        }

        public void dodajModel (string model)
        {
            myImpl.dodajModel(model);
        }

        public void dodajGorivo (string gorivo)
        {
            myImpl.dodajGorivo(gorivo);
        }

        public void dodajKaroseriju (string karoserija)
        {
            myImpl.dodajKaroseriju(karoserija);
        }

        public IList<User> dohvatiKontakt (int idAut)
        {
           return myImpl.dohvatiKontakt(idAut);
        }

        public IList<User> dohvatiKorisnika (int idKor)
        {
            return myImpl.dohvatiKorisnika(idKor);
        }

        public Privilegije dohvatiPodrazPrivilegije ()
        {
            return myImpl.dohvatiPodrazPrivilegije();
        }

        public void kreirajProfil (string korIme)
        {
            myImpl.kreirajProfil(korIme);
        }

        public IList<User> dohvatiProfil (int idKor)
        {
            return myImpl.dohvatiProfil(idKor);
        }

        public void azurirajProfil (string ime, string prezime, string korIme, int idKor, string jezik, int velicina)
        {
            myImpl.azurirajProfil(ime, prezime, korIme, idKor, jezik, velicina);
        }

        public int proveraKorisnickog (string korIme)
        {
            return myImpl.proveraKorisnickog(korIme);
        }

        public ArrayList dohvatiJezike ()
        {
            return myImpl.dohvatiJezike();
        }

        public IList<Rezervacija> dohvatiRezervacije ()
        {
            return myImpl.dohvatiRezervacije();
        }

        public void produziRezervaciju (int idRez)
        {
            myImpl.produziRezervaciju(idRez);
        }

    }
}
